Advertisement
Guest User

Untitled

a guest
Oct 31st, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3. analog 2 pwm
  4.  
  5. PB0  pwm channel 1
  6. PB1  pwm channel 2
  7. PB2
  8. PB3  Analog 2 in
  9. PB4  Analog 1 in
  10. PB5 (RESET)
  11.  
  12. CODE BY RUE_MOHR!
  13.  
  14. */
  15. #include <avr/io.h>
  16. #include <avr/interrupt.h>
  17. #include "avrcommon.h"
  18.  
  19. #define OUTPUT  1
  20. #define INPUT   0
  21.  
  22.  
  23.  void PWMInit ( void );
  24.  void Init_ADC( void );
  25.  
  26.  
  27.  volatile unsigned int AdcValues[2];
  28.  volatile unsigned char flag;
  29.  
  30. int main( void ) {
  31.  
  32.  
  33.  
  34.   // Set clock prescaler: 0 gives full 4.8 MHz from internal oscillator.
  35.   CLKPR = (1 << CLKPCE);
  36.   CLKPR = 0;
  37.  
  38.   DDRB = ((OUTPUT << PB0) | (OUTPUT << PB1) |(INPUT << PB2) |(INPUT << PB3) |(INPUT << PB4) |(INPUT << PB5 ));
  39.  
  40.   PWMInit();
  41.   Init_ADC();
  42.  
  43.   flag = 0;
  44.   sei();
  45.  
  46.   while(1)  {  
  47.    NOP();  
  48.   }
  49.  
  50. }
  51.  
  52. //---------------------------------------------------------------------------
  53.  
  54.  
  55.  
  56. void Init_ADC( void ) {
  57.   // VCC voltager ref, ADC2 (PB4) as default input
  58.   ADMUX = 2| (1<<ADLAR);
  59.   // Enable ADC, ADC prescaler /32
  60.   ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0) | (1<<ADIE);
  61.  
  62.   // Start conversion and wait for it to complete (result not used)
  63.   ADCSRA |= (1<<ADSC);            // Start convertion
  64.  
  65. }
  66.  
  67. ISR(ADC_vect) {
  68.   char i;
  69.   unsigned char v;
  70.  
  71.   i = ADMUX & 1;       // what channel we on?
  72.  
  73.   v = ADCH;
  74.   if (v > 0xF7) v = 0xFF;
  75.   if (v < 0x07) v = 0x00;
  76.  
  77.   if (i == 0) OCR0A = v;  // save value
  78.   else        OCR0B = v;
  79.  
  80.   ADMUX = ((1 - i) + 2) | (1<<ADLAR);       // select channel
  81.  
  82.   ADCSRA |= _BV(ADSC); // start next conversion
  83.  
  84.   flag = 1;
  85.  
  86.   return;
  87. }
  88.  
  89.  
  90. void PWMInit() {
  91.   // clear pwm levels
  92.   OCR0A = 0;
  93.   OCR0B = 0;
  94.  
  95.   // set up WGM, clock, and mode for timer 0
  96.   TCCR0A = 1 << COM0A1 |
  97.            0 << COM0A0 |
  98.            1 << COM0B1 |
  99.            0 << COM0B0 |
  100.            1 << WGM00  |
  101.            1 << WGM01  ;
  102.  
  103.   // set up WGM, clock, and mode for timer 2
  104.   TCCR0B = 0 << CS02  |
  105.            1 << CS01  |
  106.            1 << CS00  ;
  107.  
  108.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement